package main

import (
	"fmt"
	"sync"
	"time"
)

func write(ch chan int) {
	for i := 0; i < 10; i++ {
		fmt.Println("写入:", i)
		ch <- i
		time.Sleep(time.Millisecond * 10)
	}
	wg.Done()
}

func read(ch chan int) {
	for i := 0; i < 10; i++ {
		fmt.Println("读取:", <-ch)
		time.Sleep(time.Millisecond * 10)
	}
	wg.Done()
}

var wg sync.WaitGroup

/**
定义两个方法，一个方法给管道里面写数据，一个从管道里面读数据，要求同步进行
1.开启一个fn1的协程向管道inChain写入数据
2.开启一个fn2的协程从管道inChain读取数据
3.注意:fn1和fn2同时操作一个管道
4.主线程必须等待操作完成后才可以退出
*/
func main() {
	ch := make(chan int, 10)
	wg.Add(1)
	go write(ch)
	wg.Add(1)
	go read(ch)

	// 等待
	wg.Wait()
	fmt.Println("主线程执行完毕")
}
